#include <iostream>
#include <cstring>
using namespace std;
const int N=60;

int dp[N][N];
int main()
{
	string s;
	cin>>s;
	memset(dp,0x3f,sizeof(dp));
	
	for(int len=1;len<=s.size();len++)
	{
		for(int l=0;l+len-1<s.size();l++)
		{
			int r=l+len-1;
			
			if(len==1)
			{
				dp[l][l]=1;
			}
			else if(len==2)
			{
				if(s[l]==s[r])
				{
					dp[l][r]=1;
				}
				else{
					dp[l][r]=2;
				}
			}
			else{
				if(s[l]==s[r])
				{
					dp[l][r]=min(dp[l][r],min(dp[l+1][r],dp[l][r-1]));
				}
				else{
					for(int k=l;k<r;k++)
					{
						dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
					}
				}
			}
		}
	}
//	for(int i=0;i<s.size();i++)
//	{
//		for(int j=0;j<s.size();j++)
//		{
//			cout<<i<<' '<<j<<' '<<dp[i][j]<<endl;
//		}
//	}
	cout<<dp[0][s.size()-1]<<endl;
	return 0;
}
